package cn.agiledata.bank.linkbank.logic.query;

/**
 * 订单查询结果
 * 
 * @author maxianbo
 * 
 */
public class OrderQueryResponse {
    /**
     * 返回码：订单查询成功
     */
    public static final String RETURN_CODE_SUCCESS = "0000";

    /**
     * 返回码：订单查询失败，交易状态非法
     */
    public static final String RETURN_CODE_INVALID_TRANSSTATUS = "0401";

    /**
     * 返回码：订单查询失败，查询起始时间晚于结束时间
     */
    public static final String RETURN_CODE_BEGINTIME_AFTER_ENDTIME = "0402";

    /**
     * 返回码：订单查询失败，查询时间段太长
     */
    public static final String RETURN_CODE_OVERLONG_TIME_RANGE = "0403";

    /**
     * 查询结果总数
     */
    private long total;

    /**
     * 查询结果总页数
     */
    private int totalPage;

    /**
     * 查询结果页码序数
     */
    private int pageNo;

    /**
     * 订单列表
     */
    private Order[] orders;

    /**
     * 返回码
     */
    private String returnCode;

    /**
     * 错误信息
     */
    private String errorMessage;

    private OrderQueryResponse(long total, int totalPage, int pageNo,
            Order[] orders, String returnCode, String errorMessage) {
        this.total = total;
        this.totalPage = totalPage;
        this.pageNo = pageNo;
        this.orders = orders;
        this.returnCode = returnCode;
        this.errorMessage = errorMessage;
    }

    /**
     * 构造查询成功的订单结果集
     * 
     * @param total
     *            查询结果总数
     * @param totalPage
     *            TODO
     * @param pageNo
     *            查询结果页码序数
     * @param orders
     *            订单列表
     * @return 查询成功的订单结果集
     */
    public static OrderQueryResponse getSuccessfulResponse(long total,
            int totalPage, int pageNo, Order[] orders) {
        return new OrderQueryResponse(total, totalPage, pageNo, orders,
                RETURN_CODE_SUCCESS, "");
    }

    /**
     * 构造查询单个订单成功的订单结果集
     * 
     * @param order
     *            单个订单
     * @return 查询单个订单成功的订单结果集
     */
    public static OrderQueryResponse getSuccessfulResponse(Order order) {
        return new OrderQueryResponse(1, 1, 1, new Order[] { order },
                RETURN_CODE_SUCCESS, "");
    }

    /**
     * 构造查询失败的订单结果集
     * 
     * @param returnCode
     *            查询失败错误码
     * @param errorMessage
     *            TODO
     * @return 查询失败的订单结果集
     */
    public static OrderQueryResponse getFailedResponse(String returnCode,
            String errorMessage) {
        if (RETURN_CODE_SUCCESS.equals(returnCode))
            returnCode = "";
        return new OrderQueryResponse(0, 0, 0, new Order[0], returnCode,
                errorMessage);
    }

    public String getReturnCode() {
        return this.returnCode;
    }

    public String getErrorMessage() {
        return this.errorMessage;
    }

    public Order[] getOrders() {
        return this.orders;
    }

    /**
     * @return 查询结果订单数
     */
    public int getCount() {
        return this.orders.length;
    }

    public int getPageNo() {
        return this.pageNo;
    }

    public int getTotalPage() {
        return this.totalPage;
    }

    public long getTotal() {
        return this.total;
    }
}
